/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
    Button,
    InputLine,
    Input,
    TextArea,
    Select,
    InputDatalist,
    Layer,
    Popover,
    PopoverRefer,
    IconChevronDown,
    PopoverContent,
    PopoverDescription,
    MenuList,
    MenuItem,
    PopoverClose,
    IconX,
    Text,
    CheckSwitch,
    LineColumn, useTheme, useToast,
} from "customize-easy-ui-component";
import {
    InspectRecordLayout,
    InternalItemProps,
    useItemInputControl
} from "../../common/base";
import queryString from "query-string";
import {管道级别} from "../../../device/edit/压力管道";
import {useMedia} from "use-media";
import {assertNamesUnique} from "../../common/eHelper";
import {itemA下结论, 工作介质选} from "../editorDJ";
import {itemA上次问题, itemA资料审查} from "../editorReview";
import {itemA宏观检验} from "../editorMacr";
import {itemA安全附件} from "../editorAcces";
import {itemA单特性} from "../EditorFeature";

export const 结果打勾等的=['√','×','无此项','-'];


export const config设备概况 = [
    [['单位内编号', {n:'单位内编号',t:'B',l:['见管道特性表']}], ['起始—终止位置', {n:'起始终止',t:'B',l:['见管道特性表']}]],
    [['管道级别', {n:'管道级别',t:'l',l:管道级别}]],
    [['安全管理人员', '安全员'], ['联系电话', '安全员电']],
    [['性能参数>公称外径',{n:'公外径',u:'mm'}], ['管道长度',{n:'管长度',u:'m'}]],
    [['管道壁厚',{n:'管壁厚', u:'mm'}], ['设计压力',{n:'设计压', u:'MPa'}]],
    [['设计温度',{n:'设计温', u:'℃'}], ['工作压力',{n:'工作压', u:'MPa'}]],
    [['工作温度',{n:'工作温', u:'℃'}], ['工作介质',{n:'工作介',t:'l',l:工作介质选}]],
];

/**开启编制时的：默认值初始化操作。  若打印：本编辑器全部都不显示。
 * */
export const EntranceSetup =
    React.forwardRef((
        {children, show, alone = true, repId, verId, rep}: InternalItemProps, ref
    ) => {
        const atPrint = useMedia('print');
        const theme = useTheme();
        const toast = useToast();
        const checkName = true;      //开发测试完，改成=false, 测试时 REACT_APP_TEST 需设置， 开发模式的校对开关。
        const doCheckNames = React.useCallback((verId: string) => {
            //【承压更少项目】，那些属于公共模板目录的 分项报告的唯一性检查在对方自己检查看。
            const result = assertNamesUnique([{value: rep?.tzFields},
                {value: config设备概况, type:'esnt'},
                {value:[...itemA下结论,...itemA资料审查,...itemA上次问题,...itemA宏观检验,...itemA安全附件,...itemA单特性, ]},
                {value:['Projects', ]} ]);
            toast({title: "完成！", subtitle: result ? "没发现冲突" : "测试开关没开", intent: "success"});
        }, [rep,toast]);
        const getInpFilter = React.useCallback((par: any) => {}, []);
        const {inp, setInp} = useItemInputControl({ref});
        if (atPrint) return null;
        else return (
            <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show}
                                 alone={alone} label={'初始化本报告，默认值配置等'}>
                {checkName && <div>
                    <Text variant="h5">
                        构建开发模板时的工具：校验模板的存储name冲突；
                    </Text>
                    <Button intent='primary' onPress={() => {
                        doCheckNames(verId!);
                    }}>校验模板name唯一性</Button>
                </div>
                }
                <hr/>
            </InspectRecordLayout>
        );
    });

const checkConfig腐蚀=[['介质名称','腐蚀介质名称'],['腐蚀介质成分','腐蚀介质成分'],['腐蚀介质含量','腐蚀介质含量'],['腐蚀速度','腐蚀速度'],
    ['腐蚀机理','腐蚀机理'],['其他检验、检测','附加检验其他'],['备注','附加检验备注'],['检测结果','附加检测结果']];
export const Corrosive=
    React.forwardRef((
        { children, show ,alone=true}:InternalItemProps,  ref
    ) => {
        const getInpFilter = React.useCallback((par: any) => {
            let fields={} as any;
            checkConfig腐蚀.map(([ _,aName], i:number)=> {
                fields[aName] =par[aName];
                return null;
            });
            return fields;
        }, []);
        const {inp, setInp} = useItemInputControl({ ref });
        return (
            <InspectRecordLayout inp={inp} setInp={setInp}  getInpFilter={getInpFilter} show={show}
                                 alone={alone}  label={'附加检验-腐蚀介质含量测定'} column={0}>
                附加检验-   ????控制器部分的 :
                {
                    checkConfig腐蚀.map(([title,aName], i:number)=> {
                        return <React.Fragment key={i}>
                            {i===5 && <>附加检验报告<br/></>}
                            {i===6 && '附加检验报告-'}
                            {(i>4)?
                                <>
                                 {title+`:`}
                                  <TextArea  value={inp?.[aName] || ''} rows={i===7? 3 : 6}
                                               onChange={e => {
                                                   inp[aName] = e.currentTarget.value||undefined;
                                                   setInp({...inp});
                                         } } />
                                </>
                                :
                                <InputLine  label={title+`:`}>
                                    <Input  value={inp?.[aName] || ''}
                                            onChange={e => {
                                                inp[aName] = e.currentTarget.value||undefined;
                                                setInp({...inp});
                                            } } />
                                </InputLine>
                            }
                        </React.Fragment>;
                    })
                }
            </InspectRecordLayout>
        );
    } );



//下结论页面：
export const ItemConclusionVs=
    React.forwardRef((
        { children, show ,alone=true}:InternalItemProps,  ref
    ) => {
        const getInpFilter = React.useCallback((par: any) => {
            //检验人IDs编制日期编制人结论：这些字段要提升到关系数据库表中，而不是json字段里面。只能保留上级语义更强的，json半结构化数据的就不做保留。
            const {结论压力,结论介质,安全状况等级,检验结论,结论温度,结论其它,下检日期,结论说明} =par||{};
            return {结论压力,结论介质,安全状况等级,检验结论,结论温度,结论其它,下检日期,结论说明};
        }, []);
        const {inp, setInp} = useItemInputControl({ ref });
        return (
            <InspectRecordLayout inp={inp} setInp={setInp}  getInpFilter={getInpFilter} show={show}
                                 alone={alone}  label={'检验结论-检查结论'} column={0}>
                检验结论-检查结论
                <InputLine  label='压力容器安全状况等级评定为' >
                    <Select inputSize="md" css={{minWidth:'140px',fontSize:'1.3rem',padding:'0 1rem'}}
                            value={ inp?.安全状况等级  ||''}
                            onChange={e => setInp({ ...inp, 安全状况等级: e.currentTarget.value||undefined}) }
                    >
                        <option></option>
                        <option>1级</option>
                        <option>2级</option>
                        <option>3级</option>
                        <option>4级</option>
                        <option>5级</option>
                    </Select>
                </InputLine>
                <InputLine  label='检查结论' >
                    <Select inputSize="md" css={{minWidth:'140px',fontSize:'1.3rem',padding:'0 1rem'}}
                            value={ inp?.检验结论  ||''}
                            onChange={e => setInp({ ...inp, 检验结论: e.currentTarget.value||undefined}) }
                    >
                        <option></option>
                        <option>符合要求</option>
                        <option>基本符合要求</option>
                        <option>不符合要求</option>
                    </Select>
                </InputLine>
                允许（监控）使用参数
                <InputLine  label='压力' >
                    <Input  value={inp?.结论压力 ||''}
                            onChange={e => setInp({ ...inp, 结论压力: e.currentTarget.value||undefined}) } />
                </InputLine>
                <InputLine  label='介质' >
                    <Input  value={inp?.结论介质 ||''}
                            onChange={e => setInp({ ...inp, 结论介质: e.currentTarget.value||undefined}) } />
                </InputLine>
                <InputLine  label='温度' >
                    <Input  value={inp?.结论温度 ||''}
                            onChange={e => setInp({ ...inp, 结论温度: e.currentTarget.value||undefined}) } />
                </InputLine>
                <InputLine  label='其它' >
                    <Input  value={inp?.结论其它 ||''}
                            onChange={e => setInp({ ...inp, 结论其它: e.currentTarget.value||undefined}) } />
                </InputLine>
                <InputLine  label='下次定期检验日期' >
                    <Input  value={inp?.下检日期 ||''}  type='date'
                            onChange={e => setInp({ ...inp, 下检日期: e.currentTarget.value}) } />
                </InputLine>
                说明
                <TextArea  value={inp?.结论说明 ||''} rows={10}
                           onChange={e => setInp({ ...inp, 结论说明: e.currentTarget.value||undefined}) } />
            </InspectRecordLayout>
        );
    } );
